﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;


namespace Modelo.Sistema
{
    public class CatalogoOrdenProduccion
    {
        private static CatalogoOrdenProduccion _Instancia;
        public static CatalogoOrdenProduccion ObtenerInstancia()
        {
            if (_Instancia == null)
            {
                _Instancia = new CatalogoOrdenProduccion();
            }
            return _Instancia;
        }

        private List<Entidades.Sistema.OrdenProduccion> Col_OrdenProduccion;

        private CatalogoOrdenProduccion()
        {
            Col_OrdenProduccion = Mapping.Sistema.MappingOrdenProduccion.ConsultarOrdenProduccion();
        }
        public ReadOnlyCollection<Entidades.Sistema.OrdenProduccion> ListarOrdenesProduccion()
        {
            return Col_OrdenProduccion.AsReadOnly();
        }
        public ReadOnlyCollection<Entidades.Sistema.OrdenProduccion> ListarOrdenesProduccion(int cod_orden, string estado, DateTime fec_orden, Entidades.Sistema.Producto oProducto)
        {

            var query = from orden in Col_OrdenProduccion select orden;
            

            if (cod_orden != 0)
            {
                query = query.Where(ord => ord.cod_orden == cod_orden);
            }
            if (estado != "TODOS")
            {
                query = query.Where(ord => ord.stateOrden.DevolverEstado() == estado);
            }

            //query = query.Where(ord => ord.fecha_orden >= fec_orden);

            if (oProducto.nombre != "TODOS")
            {
                query = query.Where(ord => ord.producto.cod_producto == oProducto.cod_producto);
            }

            return query.ToList().AsReadOnly();
        }

        public void CambiaEstadoOrden(Entidades.Sistema.OrdenProduccion oOrden)
        {
            Mapping.Sistema.MappingOrdenProduccion.CambiaEstadoOrden(oOrden);
            Col_OrdenProduccion.Remove(oOrden);
            Col_OrdenProduccion.Add(oOrden);
        }

        public void ModificarOrden(Entidades.Sistema.OrdenProduccion oOrden)
        {
            Mapping.Sistema.MappingOrdenProduccion.ModificarOrdenProduccion(oOrden);
            Col_OrdenProduccion.Remove(oOrden);
            Col_OrdenProduccion.Add(oOrden);
        }

        public bool EliminarOrden(Entidades.Sistema.OrdenProduccion oOrden)
        {
            Col_OrdenProduccion.Remove(oOrden);
            return Mapping.Sistema.MappingOrdenProduccion.EliminarOrden(oOrden);
        }

        public int RegistrarOrden(Entidades.Sistema.OrdenProduccion oOrden)
        {
            Col_OrdenProduccion.Add(oOrden);
            int res = Mapping.Sistema.MappingOrdenProduccion.RegistrarOrdenProduccion(oOrden);


            if (res > 0)
            {
                return res;
            }
            else
            {
                return res;
            }
        }
    }
}
